diff options
Diffstat (limited to 'app/[lng]')
5 files changed, 76 insertions, 22 deletions
diff --git a/app/[lng]/evcp/(evcp)/items/page.tsx b/app/[lng]/evcp/(evcp)/items/page.tsx index 31dcaf11..0c44bf0a 100644 --- a/app/[lng]/evcp/(evcp)/items/page.tsx +++ b/app/[lng]/evcp/(evcp)/items/page.tsx @@ -8,6 +8,7 @@ import { Shell } from "@/components/shell" import { searchParamsCache } from "@/lib/items/validations" import { getItems } from "@/lib/items/service" import { ItemsTable } from "@/lib/items/table/items-table" +import { ViewModeToggle } from "@/components/data-table/view-mode-toggle" interface IndexPageProps { searchParams: Promise<SearchParams> @@ -19,43 +20,35 @@ export default async function IndexPage(props: IndexPageProps) { // pageSize 기반으로 모드 자동 결정 const isInfiniteMode = search.perPage >= 1_000_000 - - console.log('Page searchParams:', searchParams) - console.log('Parsed search:', search) - console.log('isInfiniteMode (pageSize >= 1M):', isInfiniteMode) - + // 페이지네이션 모드일 때만 서버에서 데이터 가져오기 // 무한 스크롤 모드에서는 클라이언트에서 SWR로 데이터 로드 - const promises = isInfiniteMode - ? null - : Promise.all([ + const promises = isInfiniteMode + ? undefined + : Promise.all([ getItems(search), // searchParamsCache의 결과를 그대로 사용 ]) - + return ( <Shell className="gap-2"> <div className="flex items-center justify-between space-y-2"> <div className="flex items-center justify-between space-y-2"> <div> <h2 className="text-2xl font-bold tracking-tight"> - Package Items + 패키지 정보 </h2> <p className="text-muted-foreground"> - {/* Item을 등록하고 관리할 수 있습니다. */} - {isInfiniteMode && ( - <span className="ml-2 text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded"> - 무한 스크롤 모드 - </span> - )} + S-EDP로부터 수신된 패키지 정보이며 PR 전 입찰, 견적에 사용되며 벤더 데이터, 문서와 연결됩니다. </p> </div> </div> + </div> - + <React.Suspense fallback={<Skeleton className="h-7 w-52" />}> {/* DateRangePicker 등 추가 컴포넌트 */} </React.Suspense> - + <React.Suspense fallback={ <DataTableSkeleton diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/items/page.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/items/page.tsx index e9ff17b4..5d5838c6 100644 --- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/items/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/items/page.tsx @@ -41,10 +41,10 @@ export default async function SettingsAccountPage(props: IndexPageProps) { <div className="space-y-6"> <div> <h3 className="text-lg font-medium"> - Possible Items + 공급품목(패키지) </h3> <p className="text-sm text-muted-foreground"> - 딜리버리가 가능한 아이템 리스트를 확인할 수 있습니다. + {/* 딜리버리가 가능한 아이템 리스트를 확인할 수 있습니다. */} </p> </div> <Separator /> diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx index 00c3f640..7e2cd4f6 100644 --- a/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/layout.tsx @@ -35,10 +35,14 @@ export default async function SettingsLayout({ href: `/${lng}/evcp/vendors/${id}/info`, }, { - title: "공급품목", + title: "공급품목(패키지)", href: `/${lng}/evcp/vendors/${id}/info/items`, }, { + title: "공급품목(자재그룹)", + href: `/${lng}/evcp/vendors/${id}/info/materials`, + }, + { title: "견적 히스토리", href: `/${lng}/evcp/vendors/${id}/info/rfq-history`, }, diff --git a/app/[lng]/evcp/(evcp)/vendors/[id]/info/materials/page.tsx b/app/[lng]/evcp/(evcp)/vendors/[id]/info/materials/page.tsx new file mode 100644 index 00000000..0ebb66ba --- /dev/null +++ b/app/[lng]/evcp/(evcp)/vendors/[id]/info/materials/page.tsx @@ -0,0 +1,56 @@ +import { Separator } from "@/components/ui/separator" +import { type SearchParams } from "@/types/table" +import { getValidFilters } from "@/lib/data-table" +import { searchParamsMaterialCache } from "@/lib/vendors/validations" +import { getVendorMaterials } from "@/lib/vendors/service" +import { VendorMaterialsTable } from "@/lib/vendors/materials-table/item-table" + +interface IndexPageProps { + // Next.js 13 App Router에서 기본으로 주어지는 객체들 + params: { + lng: string + id: string + } + searchParams: Promise<SearchParams> +} + +export default async function SettingsAccountPage(props: IndexPageProps) { + const resolvedParams = await props.params + const lng = resolvedParams.lng + const id = resolvedParams.id + + const idAsNumber = Number(id) + + // 2) SearchParams 파싱 (Zod) + // - "filters", "page", "perPage", "sort" 등 contact 전용 컬럼 + const searchParams = await props.searchParams + const search = searchParamsMaterialCache.parse(searchParams) + const validFilters = getValidFilters(search.filters) + + + + const promises = Promise.all([ + getVendorMaterials({ + ...search, + filters: validFilters, + }, + idAsNumber) + ]) + // 4) 렌더링 + return ( + <div className="space-y-6"> + <div> + <h3 className="text-lg font-medium"> + 공급품목(자재 그룹) + </h3> + <p className="text-sm text-muted-foreground"> + {/* 딜리버리가 가능한 공급품목(자재 그룹)을 확인할 수 있습니다. */} + </p> + </div> + <Separator /> + <div> + <VendorMaterialsTable promises={promises} vendorId={idAsNumber}/> + </div> + </div> + ) +}
\ No newline at end of file diff --git a/app/[lng]/partners/(partners)/rfq-all/[id]/page.tsx b/app/[lng]/partners/(partners)/rfq-all/[id]/page.tsx index c8858704..772a9840 100644 --- a/app/[lng]/partners/(partners)/rfq-all/[id]/page.tsx +++ b/app/[lng]/partners/(partners)/rfq-all/[id]/page.tsx @@ -23,6 +23,7 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata> } export default async function VendorQuotationPage({ params }: PageProps) { + const quotationId = parseInt(params.id) if (isNaN(quotationId)) { @@ -49,7 +50,7 @@ export default async function VendorQuotationPage({ params }: PageProps) { with: { rfq: true, // 관계 설정 필요 vendor: true, // 관계 설정 필요 - items: true, // 관계 설정 필요 + // items: true, // 관계 설정 필요 } }) |
